{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/pinecone-io/examples/blob/master/learn/search/image/image-retrieval-ebook/cnn/xx_convolution.ipynb) [![Open nbviewer](https://raw.githubusercontent.com/pinecone-io/examples/master/assets/nbviewer-shield.svg)](https://nbviewer.org/github/pinecone-io/examples/blob/master/learn/search/image/image-retrieval-ebook/cnn/xx_convolution.ipynb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Based on [SO answer](https://stackoverflow.com/questions/25439243/find-the-area-between-two-curves-plotted-in-matplotlib-fill-between-area)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "f = np.asarray([0, 0, 0,   0,  1,   1, 1, 0, 0, 0, 0])\n",
    "g = np.asarray([0, 0, 0, .25, .5, .75, 1, 0, 0, 0, 0])\n",
    "# get the convolution curve\n",
    "z = np.asarray([min(x, y) for x, y in zip(f, g)])\n",
    "\n",
    "x = np.asarray(list(range(len(f))))\n",
    "\n",
    "plt.plot(x, f, label='f', marker='o')\n",
    "plt.plot(x, g, label='g', marker='x')\n",
    "plt.plot(x, z, label='z', color='k')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Calculate x intersect"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/g7/qd2j76kn64ggrl4ym2vlvzwr0000gn/T/ipykernel_34103/2039539148.py:3: RuntimeWarning: divide by zero encountered in true_divide\n",
      "  x_intersect = x[:-1] - dx / (z[1:] - z[:-1]) * z[:-1]\n",
      "/var/folders/g7/qd2j76kn64ggrl4ym2vlvzwr0000gn/T/ipykernel_34103/2039539148.py:3: RuntimeWarning: invalid value encountered in multiply\n",
      "  x_intersect = x[:-1] - dx / (z[1:] - z[:-1]) * z[:-1]\n",
      "/var/folders/g7/qd2j76kn64ggrl4ym2vlvzwr0000gn/T/ipykernel_34103/2039539148.py:4: RuntimeWarning: divide by zero encountered in true_divide\n",
      "  dx_intersect = - dx / (z[1:] - z[:-1]) * z[:-1]\n",
      "/var/folders/g7/qd2j76kn64ggrl4ym2vlvzwr0000gn/T/ipykernel_34103/2039539148.py:4: RuntimeWarning: invalid value encountered in multiply\n",
      "  dx_intersect = - dx / (z[1:] - z[:-1]) * z[:-1]\n"
     ]
    }
   ],
   "source": [
    "dx = x[1:] - x[:-1]\n",
    "\n",
    "x_intersect = x[:-1] - dx / (z[1:] - z[:-1]) * z[:-1]\n",
    "dx_intersect = - dx / (z[1:] - z[:-1]) * z[:-1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Where curves don't intersect, area calculation is simple:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [],
   "source": [
    "areas = abs(z[:-1] + z[1:]) * 0.5 * dx # signs of both z are same\n",
    "total_area = np.sum(areas)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*(you can confirm by drawing out squares and triangles from the above and calculating the areas, it makes sense I promise)*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x11fd0b430>]"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(range(len(areas)), areas)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2.25"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "total_area"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We need to repeat this with a sliding $g$ filter."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(21,)"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "padding = int(len(g) / 2)\n",
    "pad_g = np.append(np.zeros(padding), g)\n",
    "pad_g = np.append(pad_g, np.zeros(padding))\n",
    "pad_g.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x11fd61730>]"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(range(len(pad_g)), pad_g)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [],
   "source": [
    "def calc_area(f, g):\n",
    "    # get the convolution curve\n",
    "    z = np.asarray([min(x, y) for x, y in zip(f, g)])\n",
    "    # calculate intersect\n",
    "    x_intersect = x[:-1] - dx / (z[1:] - z[:-1]) * z[:-1]\n",
    "    dx_intersect = - dx / (z[1:] - z[:-1]) * z[:-1]\n",
    "    # area calculation\n",
    "    areas = abs(z[:-1] + z[1:]) * 0.5 * dx\n",
    "    # calculate total area\n",
    "    total_area = np.sum(areas)\n",
    "    return total_area"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/g7/qd2j76kn64ggrl4ym2vlvzwr0000gn/T/ipykernel_34103/879211470.py:5: RuntimeWarning: divide by zero encountered in true_divide\n",
      "  x_intersect = x[:-1] - dx / (z[1:] - z[:-1]) * z[:-1]\n",
      "/var/folders/g7/qd2j76kn64ggrl4ym2vlvzwr0000gn/T/ipykernel_34103/879211470.py:5: RuntimeWarning: invalid value encountered in multiply\n",
      "  x_intersect = x[:-1] - dx / (z[1:] - z[:-1]) * z[:-1]\n",
      "/var/folders/g7/qd2j76kn64ggrl4ym2vlvzwr0000gn/T/ipykernel_34103/879211470.py:6: RuntimeWarning: divide by zero encountered in true_divide\n",
      "  dx_intersect = - dx / (z[1:] - z[:-1]) * z[:-1]\n",
      "/var/folders/g7/qd2j76kn64ggrl4ym2vlvzwr0000gn/T/ipykernel_34103/879211470.py:6: RuntimeWarning: invalid value encountered in multiply\n",
      "  dx_intersect = - dx / (z[1:] - z[:-1]) * z[:-1]\n"
     ]
    }
   ],
   "source": [
    "areas = []\n",
    "size = len(f)\n",
    "for i in range(size):\n",
    "    areas.append(calc_area(f, pad_g[i:i+size]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[0.0, 0.0, 0.25, 0.75, 1.5, 2.25, 1.75, 1.0, 0.0, 0.0, 0.0]"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "areas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(x, areas)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.13 (default, Mar 28 2022, 06:59:08) [MSC v.1916 64 bit (AMD64)]"
  },
  "orig_nbformat": 4,
  "vscode": {
   "interpreter": {
    "hash": "5fe10bf018ef3e697f9035d60bf60847932a12bface18908407fd371fe880db9"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
